{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 大数据基础 - 上机实验\n",
    "\n",
    "### Course ID: UG_BGD_2024"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下方填写姓名和学号"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "Student_name = \"\"\n",
    "Student_id = \"\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在`YOUR CODE HERE`及 \"YOUR ANSWER HERE\" 标注的位置补全代码。  \n",
    "作业提交后由程序自动评分，提交前应执行“Validate”进行代码自检"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "作业提交操作教程（首次作业需观看）：[https://www.bilibili.com/video/BV1dH4y1X7QG](https://www.bilibili.com/video/BV1dH4y1X7QG)\n",
    "\n",
    "作业提交网站：http://quiz.zhangys.org.cn\n",
    "\n",
    "登陆用户名：学号  \n",
    "**初始登陆密码为空，首次登陆后必须更改密码（不能与学号相同），否则无法下载题目和提交作业**  \n",
    "**不要修改文件名，提交的作业文件必须与题目文件同名，否则将影响机判**  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "鼓励学习交流，严禁照搬抄袭。  \n",
    "Peer review is encouraged; plagiarism is PROHIBITED.  \n",
    "如发现雷同作业，则抄袭者和被抄袭者当次作业均判为0分。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "---"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "markdown",
     "checksum": "17e70c42a3d13bbfecba3dc904853ae7",
     "grade": false,
     "grade_id": "cell-5e007d5d3101423a",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "## 预备知识 - PyTorch库的使用\n",
    "\n",
    "练习(1分)：完成函数matrix_sum()，对矩阵所有元素求平方和，元素均为整数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "2750ebd080ef435bff0957da938b2275",
     "grade": false,
     "grade_id": "cell-06f5065e9b03bf2c",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "def matrix_sum(X): # X 为一个torch二维矩阵对象，其中元素为整数\n",
    "    return torch.sum(X.view(-1)**2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "1163c0d5c1816c001d25a3525fc647f6",
     "grade": true,
     "grade_id": "cell-34d768d01d67c53d",
     "locked": true,
     "points": 1,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "X = torch.tensor([[1,2,3], [2,3,-1]])\n",
    "assert matrix_sum(X) == 28\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "markdown",
     "checksum": "5f6177d0179373e034bbfc65b68a4bab",
     "grade": false,
     "grade_id": "cell-a1de6534713cd133",
     "locked": true,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "source": [
    "练习(1分)：完成函数matrix_sum()，对Numpy矩阵所有负数元素求平方和，矩阵元素均为整数。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "dbe738492eb20e993ecf73261c89ea55",
     "grade": false,
     "grade_id": "cell-063c9f99bc568977",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def matrix_sum(X): # X 为一个torch二维矩阵对象，其中元素为整数\n",
    "    # 找出所有负数元素\n",
    "    negative_elements = X[X < 0]\n",
    "    # 对这些负数元素求平方\n",
    "    squared_negative_elements = negative_elements ** 2\n",
    "    # 计算平方和\n",
    "    sum_of_squares = torch.sum(squared_negative_elements)\n",
    "    return sum_of_squares"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "22bceb9ee1a8efcae90f166d5d4a8bd9",
     "grade": true,
     "grade_id": "cell-0e5478698fb72104",
     "locked": true,
     "points": 1,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "X = torch.tensor([[1,2,3], [-2,3,-1]])\n",
    "assert matrix_sum(X) == 5\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Logistic regression 逻辑回归\n",
    "\n",
    "提示: 注意区分矩阵乘法与element-wise乘法（哈达玛积）。\n",
    "\n",
    "## 假设模型$h_\\theta (x)$\n",
    "\n",
    "\n",
    "首先回顾下逻辑回归模型\n",
    "$\n",
    "h_\\theta (x) = g(\\theta ^ T X)\n",
    "$\n",
    ", <br />\n",
    "其中，g是sigmoid函数（又称logistic函数，实为logistic distribution的CDF（cumulative distribution function）），其定义如下：<br />\n",
    "$\n",
    "g(z) = { 1 \\over {1+e^{-z}} }\n",
    "$\n",
    "\n",
    "$\n",
    "g(0) = { 1 \\over 2 }\n",
    "$\n",
    "\n",
    "$\n",
    "g(\\infty) = 1\n",
    "$\n",
    "\n",
    "$\n",
    "g(- \\infty) = 0\n",
    "$\n",
    "\n",
    "首先定义函数sigmoid()。sigmoid函数可以对向量或者矩阵进行操作。如果对矩阵进行操作，函数对矩阵的每一个元素都进行sigmoid操作，返回一个和输入一样大的矩阵。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "4056f6e5cc087711ff1f97dabb95873e",
     "grade": false,
     "grade_id": "cell-288aa9289f4a5b6c",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "def sigmoid(z):\n",
    "    return torch.sigmoid(z)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "af4554320fa7717282ca38f75186b72f",
     "grade": true,
     "grade_id": "cell-1df11c8bfea1a749",
     "locked": true,
     "points": 2,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "assert sigmoid(torch.tensor(0)) == 0.5\n",
    "assert sigmoid(torch.tensor(torch.inf)) == 1\n",
    "assert all (sigmoid(torch.tensor(([0, torch.inf]))) == torch.tensor(([0.5, 1.])))\n",
    "assert sigmoid(torch.tensor(-torch.inf)) == 0"
   ]
  },
  {
   "attachments": {
    "image.png": {
     "image/png": "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"
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绘制sigmoid函数，应该得到这样的图形：\n",
    "\n",
    "\n",
    "![image.png](attachment:image.png)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1ef16abd390>]"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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7gyJOW9C6Xg51uAVSsfLsQavUDley7J0+PBhtWnTptIkuicLiJ6R8PBwnXnmmV57/9jY2KD+n+FkoXS8HGvwCqXj5ViDVygcb209Ii4MYAUAAEYRRgAAgFEhHUaio6M1ZcoURUdHmy7FJ0LpeDnW4BVKx8uxBq9QO95TCYgBrAAAIHiFdM8IAAAwjzACAACMIowAAACjCCMAAMCooA8jDzzwgPr06aMmTZqoefPm1W6zY8cODRo0SE2aNFF8fLwmTJigsrKyWt/34MGDuuGGGxQbG6vmzZtr9OjROnLkiBeOoH5WrlypsLCwapfPPvusxv1+9atfVdl+7NixPqy8/tq3b1+l9oceeqjWfY4dO6aMjAy1atVKTZs21W9/+1sVFBT4qOL62b59u0aPHq0OHTqocePG6tSpk6ZMmaLS0tJa9wukcztr1iy1b99eMTExSklJ0dq1a2vd/tVXX1XXrl0VExOj888/X0uXLvVRpfWXnZ2tiy66SM2aNVN8fLyGDh2qzZs317rPggULqpzDmJgYH1Vcf3/729+q1N21a9da9wnEc+pS3c+isLAwZWRkVLt9oJ5XTwr6MFJaWqprr71Wt912W7XfdzgcGjRokEpLS7V69Wo9//zzWrBggSZPnlzr+95www36+uuvtWLFCr3zzjv6+OOPdcstt3jjEOqlT58+2rt3b6Xl5ptvVocOHXThhRfWuu+YMWMq7Tdt2jQfVd1w999/f6Xa77jjjlq3Hz9+vBYvXqxXX31VH330kfbs2aPf/OY3Pqq2fjZt2iSn06lnnnlGX3/9tR577DHNnj1b99xzzyn3DYRzu2jRImVmZmrKlClav369evToofT0dO3bt6/a7VevXq3hw4dr9OjR+vzzzzV06FANHTpUX331lY8rd89HH32kjIwMffrpp1qxYoWOHz+u/v37q7i4uNb9YmNjK53D77//3kcVN8x5551Xqe5Vq1bVuG2gnlOXzz77rNKxrlixQpJ07bXX1rhPoJ5Xj7FCxPz58624uLgq65cuXWqFh4db+fn55euefvppKzY21iopKan2vb755htLkvXZZ5+Vr3v33XetsLAwa/fu3R6v3RNKS0ut008/3br//vtr3a5v377WuHHjfFOUh5111lnWY489VuftDx06ZEVGRlqvvvpq+bqNGzdakqzc3FwvVOg906ZNszp06FDrNoFybpOTk62MjIzy1w6Hw2rTpo2VnZ1d7fa///3vrUGDBlVal5KSYt16661erdPT9u3bZ0myPvrooxq3qennmL+bMmWK1aNHjzpvHyzn1GXcuHFWp06dLKfTWe33A/W8elLQ94ycSm5urs4//3wlJCSUr0tPT1dRUZG+/vrrGvdp3rx5pR6GtLQ0hYeHa82aNV6vuT7efvtt/fDDDxo1atQpt33xxRfVunVrde/eXVlZWTp69KgPKvSMhx56SK1atVKvXr30yCOP1Hq5LS8vT8ePH1daWlr5uq5du6pdu3bKzc31RbkeU1hYqJYtW55yO38/t6WlpcrLy6t0TsLDw5WWllbjOcnNza20vWT/Gw7EcyjplOfxyJEjOuuss5SUlKSrr766xp9T/ub//u//1KZNG3Xs2FE33HCDduzYUeO2wXJOJfv/6RdeeEF//OMfa53oNVDPq6cExER53pSfn18piEgqf52fn1/jPvHx8ZXWNWrUSC1btqxxH9Pmzp2r9PT0U044eP311+uss85SmzZt9MUXX2jixInavHmzXn/9dR9VWn9//vOf9Ytf/EItW7bU6tWrlZWVpb1792rGjBnVbp+fn6+oqKgqY4kSEhL89jxWZ+vWrXriiSc0ffr0WrcLhHN74MABORyOav9Nbtq0qdp9avo3HEjn0Ol06s4779TFF1+s7t2717hdly5dNG/ePF1wwQUqLCzU9OnT1adPH3399ddenUy0oVJSUrRgwQJ16dJFe/fu1dSpU3XppZfqq6++UrNmzapsHwzn1OXNN9/UoUOHdNNNN9W4TaCeV48y3TVTHxMnTrQk1bps3Lix0j41dYONGTPG6t+/f6V1xcXFliRr6dKl1X7+Aw88YJ1zzjlV1p9++unWU089Vf8Dq4P6HPvOnTut8PBw67XXXnP783JycixJ1tatWz11CG6pz/G6zJ0712rUqJF17Nixar//4osvWlFRUVXWX3TRRdbdd9/t0eOoi/oc665du6xOnTpZo0ePdvvzTJ/b6uzevduSZK1evbrS+gkTJljJycnV7hMZGWktXLiw0rpZs2ZZ8fHxXqvT08aOHWudddZZ1s6dO93ar7S01OrUqZN17733eqky7/jxxx+t2NhY67nnnqv2+8FwTl369+9vDR482K19AvW8NkRA9ozcddddtaZMSerYsWOd3isxMbHKSH3X3RSJiYk17nPyYLqysjIdPHiwxn08pT7HPn/+fLVq1UpXXXWV25+XkpIiyf7ru1OnTm7v31ANOdcpKSkqKyvT9u3b1aVLlyrfT0xMVGlpqQ4dOlSpd6SgoMDr57E67h7rnj171K9fP/Xp00dz5sxx+/NMn9vqtG7dWhEREVXuaKrtnCQmJrq1vb/505/+VD4I3t2/giMjI9WrVy9t3brVS9V5R/PmzXXOOefUWHegn1OX77//Xu+//77bvY+Bel4bxHQa8pVTDWAtKCgoX/fMM89YsbGxNf5F7RrAum7duvJ1y5cv98sBrE6n0+rQoYN111131Wv/VatWWZKs//3vfx6uzPteeOEFKzw83Dp48GC133cNYD2xx2jTpk0BMYB1165dVufOna3rrrvOKisrq9d7+Ou5TU5Otv70pz+Vv3Y4HFbbtm1rHcB68l+eqampfj/Y0el0WhkZGVabNm2sLVu21Os9ysrKrC5duljjx4/3cHXedfjwYatFixbW448/Xu33A/WcnmzKlClWYmKidfz4cbf2C9Tz2hBBH0a+//576/PPP7emTp1qNW3a1Pr888+tzz//3Dp8+LBlWfZJ7969u9W/f39rw4YN1rJly6zTTz/dysrKKn+PNWvWWF26dLF27dpVvm7AgAFWr169rDVr1lirVq2yOnfubA0fPtznx3cq77//fo2XMnbt2mV16dLFWrNmjWVZlrV161br/vvvt9atW2dt27bNeuutt6yOHTtal112ma/Ldtvq1autxx57zNqwYYP17bffWi+88IJ1+umnWyNGjCjf5uTjtSy7e7xdu3bWBx98YK1bt85KTU21UlNTTRxCne3atcs6++yzrcsvv9zatWuXtXfv3vLlxG0C9dy+/PLLVnR0tLVgwQLrm2++sW655RarefPm5Xe83XjjjdakSZPKt//kk0+sRo0aWdOnT7c2btxoTZkyxYqMjLS+/PJLU4dQJ7fddpsVFxdnrVy5stI5PHr0aPk2Jx/r1KlTreXLl1vffvutlZeXZ1133XVWTEyM9fXXX5s4hDq76667rJUrV1rbtm2zPvnkEystLc1q3bq1tW/fPsuyguecnsjhcFjt2rWzJk6cWOV7wXJePSnow8jIkSOrvfb+4Ycflm+zfft268orr7QaN25stW7d2rrrrrsqJdkPP/zQkmRt27atfN0PP/xgDR8+3GratKkVGxtrjRo1qjzg+JPhw4dbffr0qfZ727Ztq/TfYseOHdZll11mtWzZ0oqOjrbOPvtsa8KECVZhYaEPK66fvLw8KyUlxYqLi7NiYmKsbt26WQ8++GCl3q2Tj9eyLOunn36ybr/9dqtFixZWkyZNrGuuuabSL3V/NH/+/BrHlLgE+rl94oknrHbt2llRUVFWcnKy9emnn5Z/r2/fvtbIkSMrbf/KK69Y55xzjhUVFWWdd9551pIlS3xcsftqOofz588v3+bkY73zzjvL/7skJCRYAwcOtNavX+/74t00bNgw64wzzrCioqKstm3bWsOGDas0VilYzumJli9fbkmyNm/eXOV7wXJePSnMsizLR1eEAAAAqgj554wAAACzCCMAAMAowggAADCKMAIAAIwijAAAAKMIIwAAwCjCCAAAMIowAgAAjCKMAAAAowgjAADAKMIIAAAwijACAACM+n8I1Sglt089mAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "nums = torch.arange(-10, 10, 1)\n",
    "plt.plot(nums, sigmoid(nums), 'r')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 案例分析\n",
    "目前有一个植物样本数据集，该植物数据集包含两种植物，数据集每一行代表一个植物样本，数据集第一列表示该植物的花萼长度，第二列表示植物的花瓣宽度，第三列表示植物的种类（分别用0和1表示）。你需要建立一个逻辑回归分类器，通过数据集中的两个指标（花萼长度和花瓣宽度），确定每个样本属于第一类植物（0）还是第二类植物（1）。\n",
    "\n",
    "分析数据前首先对数据进行可视化。从iris data.csv中加载数据，并在2D平面上以散点图的形式画出。 这个图的横坐标和纵坐标是花萼长度和花瓣宽度，而植物的种类由不同颜色/样式的点来表示。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import os"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "     SepalLength  PetalWidth\n",
      "0            5.1         0.2\n",
      "1            4.9         0.2\n",
      "2            4.7         0.2\n",
      "3            4.6         0.2\n",
      "4            5.0         0.2\n",
      "..           ...         ...\n",
      "98           5.7         1.2\n",
      "99           5.7         1.3\n",
      "100          6.2         1.3\n",
      "101          5.1         1.1\n",
      "102          5.7         1.3\n",
      "\n",
      "[103 rows x 2 columns]\n",
      "0      0\n",
      "1      0\n",
      "2      0\n",
      "3      0\n",
      "4      0\n",
      "      ..\n",
      "98     1\n",
      "99     1\n",
      "100    1\n",
      "101    1\n",
      "102    1\n",
      "Name: type, Length: 103, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "data=pd.read_csv(\"flower.csv\")\n",
    "data_x=data.iloc[:,:-1]\n",
    "data_y=data.iloc[:,-1]\n",
    "print(data_x)\n",
    "print(data_y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "type1 = data_x.loc[data_y == 0]\n",
    "type2 = data_x.loc[data_y == 1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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efPm8PX1NVonKirK5Hb9/f0REhJi8CAPVlQE9O8PnDsHxMcDeXnS87lzUrmpy4hr5ecDvXsDNTWAWg2sXi0919RI5aYukSfj7P08lBKDp+wHkbew5tza/Pnzxb59+0SVAy6hhIWDoB966CGDsjFjxjQYBD1jxgz9a61WK1q2bMlB0CThVWDKooQrl3gVGJHHcNgg6NatWwuVSiUCAwPFI488Il599VWRm5sr7t69a1OgFRUV4ujRo+Lo0aMCgFi2bJk4evSo+OWXX4QQQsyZM0ekpaXp69deBv/iiy+KkydPilWrVhm9DN7f31+sW7dO/Pjjj+LZZ58VYWFhBnMWNYYJkIfiPEDKooS5azgPEJFHcehVYAUFBWLNmjVi3LhxIi4uTqhUKhEcHCwGDhwo3njjDasmHdy7d68A0OAxfvx4IYQQ48ePF/369WuwTufOnYVGoxHx8fFGJ0J85513RKtWrYRGoxE9evQQB6383zgTIA+WlSUdAEz9L7iwUFqelWV8+cyZUnJj6jt18KC0fOZMeeL1dPZ+HkqJwVP2g8jNWXP8VglR55buNigoKMDevXuRk5ODbdu24ebNm6ipqbFnky5XXl6O0NBQlJWVcTyQJ+K9wJRFCfev4r3AiDyCNcdvm+4FVuuXX37B119/jX379uHrr7/G3bt30bdvX3s2SeR4jR0AGlveWHLD5Mc69n4eSonBU/aDyEtYdTf4wsJC5OTk6Ht8rly5gp49e6Jfv36YPHkyevToAQ3/wIiIiEjhrEqAWrdujVatWmHq1KmYOnUqunXrBl9fX0fFRkREROQQVp0CGzlyJKqqqvDmm2/itddew1tvvYUjR47AzmFERERERE5l0yDon376SX8abN++fbhz5w569+6Nfv36oX///vjd737niFidhoOgiYiI3I81x2+7rwIDgB9//BGbNm3CO++8w6vAiIiIyCWsOX5bNQaortLSUuTk5OgHRf/888/w9/dHnz59bN0kERERkVNYlQD9+9//1ic9p06dgp+fH373u99h5MiRePjhh9GzZ0/4+/s7KlYiIiIiWViVAD311FPo3r07hg4diocffhi9evVCYGCgo2IjIiIicgirEqDr16/jvvvuc1QsRERERE5hcQJUXl5u8GwOBw4TERGRklmcAIWFhUGlUpmtI4SASqWCVqu1OzAiIiIiR7E4Adq7d68j4yAiIiJyGosToH79+jkyDiIiIiKnsXkeIAC4desWCgsLUV1dbVDesWNHu4IiIiIiciSbEqBff/0VEydOxM6dO40u5xggIiIiUjKrboZa67nnnsONGzeQn5+PwMBA7Nq1C+vXr0dCQgK2b98ud4xEREREsrKpB+irr77Ctm3b0L17d/j4+CAuLg4DBgxASEgIFi9ejCFDhsgdJxEREZFsbOoBunnzJiIiIgAATZs2xa+//goA6NChA44cOSJfdEREREQOYFMC1KZNG5w6dQoA0KlTJ7z77ru4ePEiVq9ejejoaFkDJCIiIpKbTafAZs2aheLiYgDAggULMGjQIGzcuBEajQbr1q2TMz4iIiIi2amEEMLejdy6dQs//fQTWrVqhebNm8sRl0uVl5cjNDQUZWVlvK0HERGRm7Dm+G3TKbBXXnkFt27d0r8OCgpC165dcd999+GVV16xZZNERERETmNTD5Cvry+Ki4v1A6FrXb16FREREW4/DxB7gIiIiNyPw3uAam96Wt/x48cRHh5uyyaJiIiInMaqQdBNmzaFSqWCSqVCYmKiQRKk1WpRWVmJKVOmyB4kERERkZysSoDeeustCCHw9NNPY9GiRQgNDdUv02g0aN26NZKTk2UPkoiIiEhOViVA48ePBwD89re/Ra9evaBW23UvVSIiIiKXsGkMUL9+/fDLL79g3rx5GDNmDC5fvgwA2LlzJ3744QdZAyQiIiKSm00J0L59+9ChQwfk5+dj8+bNqKysBCANgl6wYIGsARIRERHJzaYEaM6cOXjttdfw3//+FxqNRl/+yCOP4ODBg7IFR0REROQINiVAJ06cwNChQxuUR0RE4MqVK3YHRURERORINiVAYWFh+nuB1XX06FG0bNnS7qCIiIiIHMmmBGj06NF46aWXUFJSApVKBZ1Oh7y8PMyePRvjxo2TO0YiIiIiWdmUAP39739H27Zt0apVK1RWVqJdu3bo27cvevbsiXnz5skdIxEREZGsrJrIR6fT4R//+Ae2b9+O6upqpKWlYfjw4aisrESXLl2QkJDgqDiJiIiIZGNVAvT6669j4cKFSElJQWBgIDZt2gQhBNasWeOo+IiIiIhkZ9UpsA8//BAZGRn44osvsHXrVuzYsQMbN26ETqdzVHxEREREsrMqASosLMRjjz2mf52SkgKVSoVLly7JHhgRERGR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IrIOT4ERERGR12ECRERERF6HCRARERF5HSZARERE5HWYABEREZHXYQJEREREXocJEBEREXkdJkBERETkdTgRohG1k2OXl5e7OBIiIiKyVO1x25KbXDABMqKiogIAEBsb6+JIiIiIyFoVFRUIDQ01W4f3AjNCp9Ph0qVLaNKkCVQqlavDkV15eTliY2NRVFQk+73OvA3bUl5sT/mwLeXF9pSPI9tSCIGKigrExMTAx8f8KB/2ABnh4+OD3/zmN64Ow+FCQkL4hywTtqW82J7yYVvKi+0pH0e1ZWM9P7U4CJqIiIi8DhMgIiIi8jpMgLyQv78/FixYAH9/f1eH4vbYlvJie8qHbSkvtqd8lNKWHARNREREXoc9QEREROR1mAARERGR12ECRERERF6HCRARERF5HSZAHu6NN96ASqXCc889Z7LOunXroFKpDB4BAQHOC1LBFi5c2KBtHnzwQbPrfPLJJ3jwwQcREBCADh064PPPP3dStMpmbVvye2nexYsX8dRTT6FZs2YIDAxEhw4d8N1335ldJycnB127doW/vz8eeOABrFu3zjnBugFr2zMnJ6fB91OlUqGkpMSJUStT69atjbbN9OnTTa7jit9NzgTtwb799lu8++676NixY6N1Q0JCcOrUKf1rT7wFiK3at2+P3bt361+r1ab/bL755huMGTMGixcvxuOPP45NmzbhySefxJEjR/DQQw85I1xFs6YtAX4vTbl+/Tp69eqFhx9+GDt37kSLFi1w+vRpNG3a1OQ6BQUFGDJkCKZMmYKNGzdiz549mDRpEqKjozFw4EAnRq88trRnrVOnThnMZhwREeHIUN3Ct99+C61Wq3/9/fffY8CAARgxYoTR+i773RTkkSoqKkRCQoL473//K/r16ydmzZplsu7atWtFaGio02JzJwsWLBCdOnWyuP7IkSPFkCFDDMqSkpLEn//8Z5kjcz/WtiW/l6a99NJLonfv3lat89e//lW0b9/eoGzUqFFi4MCBcobmlmxpz7179woA4vr1644JyoPMmjVL3H///UKn0xld7qrfTZ4C81DTp0/HkCFDkJKSYlH9yspKxMXFITY2Fqmpqfjhhx8cHKH7OH36NGJiYhAfH4+xY8eisLDQZN0DBw40aPOBAwfiwIEDjg7TLVjTlgC/l6Zs374d3bt3x4gRIxAREYEuXbrgvffeM7sOv5um2dKetTp37ozo6GgMGDAAeXl5Do7U/VRXV+Ojjz7C008/bbIH11XfTSZAHigrKwtHjhzB4sWLLarfpk0brFmzBtu2bcNHH30EnU6Hnj174sKFCw6OVPmSkpKwbt067Nq1C5mZmSgoKECfPn1QUVFhtH5JSQkiIyMNyiIjIzkuANa3Jb+Xpp07dw6ZmZlISEjAF198galTp2LmzJlYv369yXVMfTfLy8tx+/ZtR4esaLa0Z3R0NFavXo3PPvsMn332GWJjY9G/f38cOXLEiZEr39atW3Hjxg1MmDDBZB2X/W46tH+JnK6wsFBERESI48eP68saOwVWX3V1tbj//vvFvHnzHBChe7t+/boICQkR77//vtHlfn5+YtOmTQZlq1atEhEREc4Iz6001pb18Xt5j5+fn0hOTjYo+8tf/iJ+//vfm1wnISFB/P3vfzco+89//iMAiFu3bjkkTndhS3sa07dvX/HUU0/JGZrbe/TRR8Xjjz9uto6rfjfZA+RhDh8+jMuXL6Nr165Qq9VQq9XYt28f3n77bajVaoOBaab4+fmhS5cuOHPmjBMidi9hYWFITEw02TZRUVEoLS01KCstLUVUVJQzwnMrjbVlffxe3hMdHY127doZlLVt29bsKUVT382QkBAEBgY6JE53YUt7GtOjRw9+P+v45ZdfsHv3bkyaNMlsPVf9bjIB8jB/+MMfcOLECRw7dkz/6N69O8aOHYtjx47B19e30W1otVqcOHEC0dHRTojYvVRWVuLs2bMm2yY5ORl79uwxKPvvf/+L5ORkZ4TnVhpry/r4vbynV69eBlfHAcDPP/+MuLg4k+vwu2maLe1pzLFjx/j9rGPt2rWIiIjAkCFDzNZz2XfTof1LpAj1T4GlpaWJOXPm6F8vWrRIfPHFF+Ls2bPi8OHDYvTo0SIgIED88MMPLohWWV544QWRk5MjCgoKRF5enkhJSRHNmzcXly9fFkI0bMu8vDyhVqvF0qVLxcmTJ8WCBQuEn5+fOHHihKt2QTGsbUt+L007dOiQUKvV4vXXXxenT58WGzduFEFBQeKjjz7S15kzZ45IS0vTvz537pwICgoSL774ojh58qRYtWqV8PX1Fbt27XLFLiiKLe25fPlysXXrVnH69Glx4sQJMWvWLOHj4yN2797til1QHK1WK1q1aiVeeumlBsuU8rvJBMgL1E+A+vXrJ8aPH69//dxzz4lWrVoJjUYjIiMjxWOPPSaOHDni/EAVaNSoUSI6OlpoNBrRsmVLMWrUKHHmzBn98vptKYQQ//73v0ViYqLQaDSiffv24j//+Y+To1Yma9uS30vzduzYIR566CHh7+8vHnzwQfGvf/3LYPn48eNFv379DMr27t0rOnfuLDQajYiPjxdr1651XsAKZ217vvnmm+L+++8XAQEBIjw8XPTv31989dVXTo5aub744gsBQJw6darBMqX8bqqEEMKxfUxEREREysIxQEREROR1mAARERGR12ECRERERF6HCRARERF5HSZARERE5HWYABEREZHXYQJEREREXocJEBEREXkdJkBE5JFUKhW2bt3q6jAs4k6xEnkKJkBEJKtff/0VU6dORatWreDv74+oqCgMHDgQeXl5Lo1LCUnGwoUL0blzZ5fGQEQStasDICLPMnz4cFRXV2P9+vWIj49HaWkp9uzZg6tXr7o6NCIiPfYAEZFsbty4gf379+PNN9/Eww8/jLi4OPTo0QNz587FE088oa8zadIktGjRAiEhIXjkkUdw/Phx/TZqe0neffddxMbGIigoCCNHjkRZWZm+zrfffosBAwagefPmCA0NRb9+/XDkyBG7Yn///ffRtm1bBAQE4MEHH0RGRoZ+2fnz56FSqbB582Y8/PDDCAoKQqdOnXDgwAGDbbz33nv6mIcOHYply5YhLCwMALBu3TosWrQIx48fh0qlgkqlwrp16/TrXrlyBUOHDkVQUBASEhKwfft2u/aHiMxjAkREsgkODkZwcDC2bt2Kqqoqo3VGjBiBy5cvY+fOnTh8+DC6du2KP/zhD7h27Zq+zpkzZ/Dvf/8bO3bswK5du3D06FFMmzZNv7yiogLjx49Hbm4uDh48iISEBDz22GOoqKiwKe6NGzdi/vz5eP3113Hy5En8/e9/x8svv4z169cb1Pvb3/6G2bNn49ixY0hMTMSYMWNQU1MDAMjLy8OUKVMwa9YsHDt2DAMGDMDrr7+uX3fUqFF44YUX0L59exQXF6O4uBijRo3SL1+0aBFGjhyJ//3vf3jssccwduxYgzYhIpk5/H7zRORVPv30U9G0aVMREBAgevbsKebOnSuOHz8uhBBi//79IiQkRNy5c8dgnfvvv1+8++67QgghFixYIHx9fcWFCxf0y3fu3Cl8fHxEcXGx0ffUarWiSZMmYseOHfoyAGLLli0mX9d//02bNhmUvfrqqyI5OVkIIURBQYEAIN5//3398h9++EEAECdPnhRCCDFq1CgxZMgQg22MHTtWhIaG6l8vWLBAdOrUqcH7AxDz5s3Tv66srBQAxM6dO43GS0T2Yw8QEclq+PDhuHTpErZv345BgwYhJycHXbt2xbp163D8+HFUVlaiWbNm+t6i4OBgFBQU4OzZs/pttGrVCi1bttS/Tk5Ohk6nw6lTpwAApaWlmDx5MhISEhAaGoqQkBBUVlaisLDQ6nhv3ryJs2fP4plnnjGI6bXXXjOICQA6duyo/3d0dDQA4PLlywCAU6dOoUePHgb16782p+6277vvPoSEhOi3TUTy4yBoIpJdQEAABgwYgAEDBuDll1/GpEmTsGDBAkybNg3R0dHIyclpsE7tWBlLjB8/HlevXsWKFSsQFxcHf39/JCcno7q62upYKysrAUjjd5KSkgyW+fr6Grz28/PT/1ulUgEAdDqd1e9pTN1t125frm0TUUNMgIjI4dq1a4etW7eia9euKCkpgVqtRuvWrU3WLywsxKVLlxATEwMAOHjwIHx8fNCmTRsA0nibjIwMPPbYYwCAoqIiXLlyxabYIiMjERMTg3PnzmHs2LE2bQMA2rRpg2+//dagrP5rjUYDrVZr83sQkXyYABGRbK5evYoRI0bg6aefRseOHdGkSRN89913WLJkCVJTU5GSkoLk5GQ8+eSTWLJkCRITE3Hp0iX85z//wdChQ9G9e3cAUg/S+PHjsXTpUpSXl2PmzJkYOXIkoqKiAAAJCQnYsGEDunfvjvLycrz44osIDAxsNL6CggIcO3bMoCwhIQGLFi3CzJkzERoaikGDBqGqqgrfffcdrl+/jvT0dIv2/S9/+Qv69u2LZcuW4Y9//CO++uor7Ny5U99TBACtW7fWx/Cb3/wGTZo0gb+/v4WtS0SycvUgJCLyHHfu3BFz5swRXbt2FaGhoSIoKEi0adNGzJs3T9y6dUsIIUR5ebn4y1/+ImJiYoSfn5+IjY0VY8eOFYWFhUKIewOFMzIyRExMjAgICBB/+tOfxLVr1/Tvc+TIEdG9e3cREBAgEhISxCeffCLi4uLE8uXL9XVgZBC0scf+/fuFEEJs3LhRdO7cWWg0GtG0aVPRt29fsXnzZiHEvUHQR48e1W/v+vXrAoDYu3evvuxf//qXaNmypQgMDBRPPvmkeO2110RUVJRB+wwfPlyEhYUJAGLt2rVGYxVCiNDQUP1yIpKfSgghXJR7ERE1sHDhQmzdurVBT407mjx5Mn766Sfs37/f1aEQUT08BUZEJJOlS5diwIABuO+++7Bz506sX7/eYEJFIlIOJkBERDI5dOgQlixZgoqKCsTHx+Ptt9/GpEmTXB0WERnBU2BERETkdTgRIhEREXkdJkBERETkdZgAERERkddhAkRERERehwkQEREReR0mQEREROR1mAARERGR12ECRERERF7n/wDuM9QeHiYKvQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 定义数据可视化函数\n",
    "def plotData():\n",
    "    plt.figure()\n",
    "    plt.scatter(type1['SepalLength'], type1['PetalWidth'], s=50, c='b', marker='o', label='type1')\n",
    "    plt.scatter(type2['SepalLength'], type2['PetalWidth'], s=50, c='r', marker='x', label='type2')\n",
    "    plt.legend()\n",
    "    plt.xlabel('SepalLength')\n",
    "    plt.ylabel('PetalWidth')\n",
    "    \n",
    "plotData()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "上图可以看到较为明显的线性决策边界，下面使用逻辑回归求解该分类问题\n",
    "\n",
    "首先完成自定义的Dataset类，用于数据读取。提示：需要提供`__init__`, `__len__` 和 `__getitem__` 三个函数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "47c0327178d5c649f00b86af2a712d99",
     "grade": false,
     "grade_id": "cell-495bf1df49637309",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import pandas as pd\n",
    "import torch\n",
    "from torch.utils.data import Dataset\n",
    "\n",
    "class MyDataset(Dataset):\n",
    "    def __init__(self, file_path='flower.csv'):\n",
    "# 读取 CSV 文件并分割特征和标签\n",
    "        data = pd.read_csv(file_path)\n",
    "        self.X = data.iloc[:, :-1].values  # 特征：花萼长度和花瓣宽度\n",
    "        self.y = data.iloc[:, -1].values.reshape(-1, 1)  # 标签：植物种类，0 或 1\n",
    "\n",
    "    def __len__(self):\n",
    "        # 返回样本的数量\n",
    "        return len(self.y)\n",
    "\n",
    "    def __getitem__(self, idx):\n",
    "         # 获取特定样本及其对应的标签\n",
    "        xi = torch.tensor(self.X[idx], dtype=torch.float32)\n",
    "        yi = torch.tensor(self.y[idx], dtype=torch.float32)\n",
    "        return xi, yi"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "34c76c9507ee19e08b3a400a2bb2cf7d",
     "grade": true,
     "grade_id": "cell-727be461929e18fc",
     "locked": true,
     "points": 4,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "dataset = MyDataset()\n",
    "\n",
    "assert len(dataset) == 103\n",
    "assert dataset.X.shape == (103,2)\n",
    "assert dataset.y.shape == (103,1)\n",
    "\n",
    "xi,yi = dataset[0]\n",
    "assert len(xi) == 2\n",
    "assert yi == 0\n",
    "\n",
    "batch_size = 16\n",
    "dataloader = torch.utils.data.DataLoader(dataset, batch_size=batch_size, shuffle=True, drop_last=False)\n",
    "xb, yb = next(iter(dataloader))\n",
    "assert xb.shape == (batch_size,2)\n",
    "assert yb.shape == (batch_size,1)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "定义模型，使用一个linear层 + sigmoid激活"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "deletable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "98813d69c6a1f0b9368be6d3c40a52f6",
     "grade": false,
     "grade_id": "cell-22e9be6424fe8837",
     "locked": false,
     "schema_version": 3,
     "solution": true,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "\n",
    "class LogisticRegression(nn.Module):\n",
    "    def __init__(self, input_dim, output_dim):\n",
    "        super(LogisticRegression, self).__init__()\n",
    "        # 定义线性层\n",
    "        self.linear = nn.Linear(input_dim, output_dim)\n",
    "\n",
    "    def forward(self, x):\n",
    "        # 前向传播，应用 sigmoid 激活函数\n",
    "        return torch.sigmoid(self.linear(x))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "deletable": false,
    "editable": false,
    "nbgrader": {
     "cell_type": "code",
     "checksum": "35a30bf7c78b2f82d801f79f8c8f3672",
     "grade": true,
     "grade_id": "cell-8587d7f69c010b82",
     "locked": true,
     "points": 3,
     "schema_version": 3,
     "solution": false,
     "task": false
    }
   },
   "outputs": [],
   "source": [
    "device = 'cuda' if torch.cuda.is_available() else 'cpu'\n",
    "model = LogisticRegression(input_dim = 2, output_dim = 1).to(device)\n",
    "\n",
    "assert list(model.state_dict().keys()) == ['linear.weight', 'linear.bias']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "criterion = nn.BCELoss()\n",
    "optimizer = torch.optim.SGD(model.parameters(), lr=1)\n",
    "\n",
    "losses = []\n",
    "for epoch in range(50):\n",
    "\n",
    "    for i, (x, y) in enumerate(dataloader):\n",
    "\n",
    "        x = x.float().to(device)\n",
    "        y = y.float().to(device)\n",
    "\n",
    "        # Forward pass\n",
    "        y_pred = model(x) \n",
    "        # print(y_pred)\n",
    "\n",
    "        # Compute loss\n",
    "        loss = criterion(y_pred, y)\n",
    "        losses.append(loss.item())\n",
    "\n",
    "        # Backward pass\n",
    "        loss.backward()\n",
    "\n",
    "        # Update parameters\n",
    "        optimizer.step()\n",
    "\n",
    "        # Reset gradients\n",
    "        optimizer.zero_grad() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1ef1a045b10>]"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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eMT7778vhBBi586dAoBYt26dss+XX34pHA6HOHLkyGk791QwCyyuv/560/tY6fkLIURZWZkAIJYtWyaEiO99/8UXXwin0ylKS0uVfWbOnCmys7OF1+s9vU8gBfSvgRDBD5YHH3zQ9D5Wew2EEKJ9+/bin//8py3fA0KEn78QZ9bPv9UPhTQ2NmLDhg0YP368cpvT6cT48eOxatWqFjyz5rNnzx7k5+ejb9++mDRpEoqKigAAGzZsgM/n07wWgwYNQs+ePS37Whw4cAClpaWa55yTk4MxY8Yoz3nVqlXIzc3Fueeeq+wzfvx4OJ1OrFmz5rSfc3NYunQp8vLyMHDgQNx77704efKkss1qz7+yshIA0KFDBwDxve9XrVqFYcOGoUuXLso+V111FaqqqrBjx47TePapoX8NZO+++y46deqEoUOHYtq0aairq1O2Wek1CAQCmDNnDmprazF27FjbvQf0z192pvz8T/siZKl24sQJBAIBzYsFAF26dMGuXbta6Kyaz5gxYzB79mwMHDgQJSUlmD59Oi6++GJs374dpaWlSE9PR25uruY+Xbp0QWlpacuccDOTn5fRz1/eVlpairy8PM12t9uNDh06WOJ1ufrqq/Ff//Vf6NOnD/bt24ff//73mDBhAlatWgWXy2Wp5y9JEh566CGMGzcOQ4cOBYC43velpaWG7xF5W2ti9BoAwM9+9jP06tUL+fn52Lp1K373u9+hsLAQn3zyCQBrvAbbtm3D2LFj0dDQgHbt2mHu3LkYPHgwNm/ebIv3gNnzB86sn3+rDyzsZsKECcr14cOHY8yYMejVqxc+/PBDZGZmtuCZUUu59dZblevDhg3D8OHD0a9fPyxduhRXXHFFC55Z6k2ZMgXbt2/HihUrWvpUWozZa3D33Xcr14cNG4Zu3brhiiuuwL59+9CvX7/TfZrNYuDAgdi8eTMqKyvx73//G5MnT8ayZcta+rROG7PnP3jw4DPq59/qh0I6deoEl8sVUf177NgxdO3atYXO6vTJzc3FWWedhb1796Jr165obGxERUWFZh8rvxby84r28+/atSvKyso02/1+P8rLyy35uvTt2xedOnXC3r17AVjn+d933334z3/+g2+++QY9evRQbo/nfd+1a1fD94i8rbUwew2MjBkzBgA074PW/hqkp6ejf//+GD16NGbMmIERI0bgpZdess17wOz5G2nJn3+rDyzS09MxevRoLF68WLlNkiQsXrxYM/ZkVTU1Ndi3bx+6deuG0aNHIy0tTfNaFBYWoqioyLKvRZ8+fdC1a1fNc66qqsKaNWuU5zx27FhUVFRgw4YNyj5LliyBJEnKfz4rOXz4ME6ePIlu3boBaP3PXwiB++67D3PnzsWSJUvQp08fzfZ43vdjx47Ftm3bNAHWwoULkZ2draSSz2SxXgMjmzdvBgDN+6A1vwZGJEmC1+u1xXvAiPz8jbTozz+lpaAtZM6cOcLj8YjZs2eLnTt3irvvvlvk5uZqql+t4pFHHhFLly4VBw4cECtXrhTjx48XnTp1EmVlZUKI4JSrnj17iiVLloj169eLsWPHirFjx7bwWTdNdXW12LRpk9i0aZMAIF544QWxadMmcejQISFEcLppbm6umD9/vti6dau4/vrrDaebjhw5UqxZs0asWLFCDBgwoNVMt4z2/Kurq8VvfvMbsWrVKnHgwAGxaNEiMWrUKDFgwADR0NCgHKM1P/97771X5OTkiKVLl2qm0tXV1Sn7xHrfy1PtrrzySrF582bx1Vdfic6dO7eaqYaxXoO9e/eKp556Sqxfv14cOHBAzJ8/X/Tt21dccsklyjFa+2swdepUsWzZMnHgwAGxdetWMXXqVOFwOMSCBQuEENZ/D0R7/mfaz98SgYUQQrz88suiZ8+eIj09XZx//vli9erVLX1KzeKWW24R3bp1E+np6aJ79+7illtuEXv37lW219fXi1/96leiffv2ok2bNuLGG28UJSUlLXjGTffNN98IABFfkydPFkIEp5w+9thjokuXLsLj8YgrrrhCFBYWao5x8uRJMXHiRNGuXTuRnZ0tbr/9dlFdXd0CzyZx0Z5/XV2duPLKK0Xnzp1FWlqa6NWrl7jrrrsigurW/PyNnjsA8dZbbyn7xPO+P3jwoJgwYYLIzMwUnTp1Eo888ojw+Xyn+dkkJ9ZrUFRUJC655BLRoUMH4fF4RP/+/cWjjz6q6WMgROt+De644w7Rq1cvkZ6eLjp37iyuuOIKJagQwvrvgWjP/0z7+XPZdCIiIkqZVl9jQURERGcOBhZERESUMgwsiIiIKGUYWBAREVHKMLAgIiKilGFgQURERCnDwIKIiIhShoEFERERpQwDCyIiIkoZBhZERESUMgwsiIiIKGUYWBAREVHK/H8J+FYukLqr0QAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(losses) # 此处应观察到损失值整体上成下降态势"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "final model:  -1.020962119102478 * x1 +  10.695921897888184  * x2 +  -2.1114418506622314  = 0\n"
     ]
    }
   ],
   "source": [
    "print(\"final model: \", model.state_dict()['linear.weight'][0][0].item(), '* x1 + ', model.state_dict()['linear.weight'][0][1].item(), ' * x2 + ', model.state_dict()['linear.bias'][0].item(), ' = 0')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.legend.Legend at 0x1ef1c3300d0>"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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6/AWGBEREXkcJkBERETkcZgAERERkcdhAkREREQehwkQEREReRwmQERERORxmAARERGRx2ECRERERB6HAyGaUDI4dk5OjpMjISIiIkuVXLctmeSCCZAJubm5AIDo6GgnR0JERETWys3NRUhISLllOBeYCXq9Hunp6ahatSo0Go2zw1FcTk4OoqOjodPpFJ/rzNPwXCqL51M5PJfK4vlUjj3PpRACubm5iIqKgpdX+a18WANkgpeXF+rUqePsMOwuODiYf8gK4blUFs+ncngulcXzqRx7ncuKan5KsBE0EREReRwmQERERORxmAB5ID8/P0ybNg1+fn7ODsXl8Vwqi+dTOTyXyuL5VI5aziUbQRMREZHHYQ0QEREReRwmQERERORxmAARERGRx2ECRERERB6HCZCbmzNnDjQaDV588UWzZZKTk6HRaAwe/v7+jgtSxaZPn250bu65555yt1m/fj3uuece+Pv7o1mzZvj+++8dFK26WXsu+bks38WLF/Hkk0+ievXqCAgIQLNmzfDbb7+Vu01KSgpat24NPz8/NGjQAMnJyY4J1gVYez5TUlKMPp8ajQaZmZkOjFqdYmNjTZ6b559/3uw2zvje5EjQbuzAgQP46KOP0Lx58wrLBgcH4+TJk/Jzd5wCpLKaNm2Kbdu2yc99fMz/2fz6668YMmQIZs+ejUcffRRr1qxBnz59cOjQIdx7772OCFfVrDmXAD+X5ly/fh0dOnTAgw8+iC1btqBmzZo4deoUqlWrZnabtLQ09OrVC2PGjMHq1auxfft2jBo1CpGRkUhKSnJg9OpTmfNZ4uTJkwajGYeHh9szVJdw4MABFBcXy89///13dO/eHQMGDDBZ3mnfm4LcUm5urmjYsKH46aefRJcuXcTEiRPNll2xYoUICQlxWGyuZNq0aaJFixYWlx84cKDo1auXwbKEhATx3HPPKRyZ67H2XPJzad7rr78uOnbsaNU2r732mmjatKnBskGDBomkpCQlQ3NJlTmfO3bsEADE9evX7ROUG5k4caKoX7++0Ov1Jtc763uTt8Dc1PPPP49evXohMTHRovJ5eXmIiYlBdHQ0evfujT/++MPOEbqOU6dOISoqCnFxcRg6dCjOnz9vtuzevXuNznlSUhL27t1r7zBdgjXnEuDn0pxvvvkGbdu2xYABAxAeHo5WrVrh448/LncbfjbNq8z5LNGyZUtERkaie/fu2LNnj50jdT2FhYX4/PPP8fTTT5utwXXWZ5MJkBtau3YtDh06hNmzZ1tUvlGjRli+fDk2bdqEzz//HHq9Hg888AAuXLhg50jVLyEhAcnJydi6dSuWLl2KtLQ0dOrUCbm5uSbLZ2ZmolatWgbLatWqxXYBsP5c8nNp3tmzZ7F06VI0bNgQP/zwA8aOHYsJEyZg5cqVZrcx99nMyclBfn6+vUNWtcqcz8jISCxbtgxfffUVvvrqK0RHR6Nr1644dOiQAyNXv40bN+LGjRsYOXKk2TJO+960a/0SOdz58+dFeHi4OHr0qLysoltgZRUWFor69euLN954ww4Rurbr16+L4OBg8cknn5hc7+vrK9asWWOwbPHixSI8PNwR4bmUis5lWfxc3uXr6yvat29vsOyFF14Q999/v9ltGjZsKN555x2DZd99950AIG7dumWXOF1FZc6nKZ07dxZPPvmkkqG5vIcfflg8+uij5ZZx1vcma4DczMGDB3Hp0iW0bt0aPj4+8PHxwc6dO/HBBx/Ax8fHoGGaOb6+vmjVqhVOnz7tgIhdS2hoKOLj482em4iICGRlZRksy8rKQkREhCPCcykVncuy+Lm8KzIyEk2aNDFY1rhx43JvKZr7bAYHByMgIMAucbqKypxPU9q1a8fPZyl///03tm3bhlGjRpVbzlnfm0yA3MxDDz2EY8eO4ciRI/Kjbdu2GDp0KI4cOQJvb+8K91FcXIxjx44hMjLSARG7lry8PJw5c8bsuWnfvj22b99usOynn35C+/btHRGeS6noXJbFz+VdHTp0MOgdBwB//fUXYmJizG7Dz6Z5lTmfphw5coSfz1JWrFiB8PBw9OrVq9xyTvts2rV+iVSh7C2wYcOGicmTJ8vPZ8yYIX744Qdx5swZcfDgQTF48GDh7+8v/vjjDydEqy4vv/yySElJEWlpaWLPnj0iMTFR1KhRQ1y6dEkIYXwu9+zZI3x8fMR7770nTpw4IaZNmyZ8fX3FsWPHnHUIqmHtueTn0rz9+/cLHx8f8fbbb4tTp06J1atXi8DAQPH555/LZSZPniyGDRsmPz979qwIDAwUr776qjhx4oRYvHix8Pb2Flu3bnXGIahKZc7n/PnzxcaNG8WpU6fEsWPHxMSJE4WXl5fYtm2bMw5BdYqLi0XdunXF66+/brROLd+bTIA8QNkEqEuXLmLEiBHy8xdffFHUrVtXaLVaUatWLfHII4+IQ4cOOT5QFRo0aJCIjIwUWq1W1K5dWwwaNEicPn1aXl/2XAohxH//+18RHx8vtFqtaNq0qfjuu+8cHLU6WXsu+bks3+bNm8W9994r/Pz8xD333CP+85//GKwfMWKE6NKli8GyHTt2iJYtWwqtVivi4uLEihUrHBewyll7Pv/973+L+vXrC39/fxEWFia6du0qfv75ZwdHrV4//PCDACBOnjxptE4t35saIYSwbx0TERERkbqwDRARERF5HCZARERE5HGYABEREZHHYQJEREREHocJEBEREXkcJkBERETkcZgAERERkcdhAkREREQehwkQEbkljUaDjRs3OjsMi7hSrETuggkQESnq8uXLGDt2LOrWrQs/Pz9EREQgKSkJe/bscWpcakgypk+fjpYtWzo1BiKS+Dg7ACJyL/3790dhYSFWrlyJuLg4ZGVlYfv27bh69aqzQyMikrEGiIgUc+PGDezatQv//ve/8eCDDyImJgbt2rXDlClT8Pjjj8tlRo0ahZo1ayI4OBjdunXD0aNH5X2U1JJ89NFHiI6ORmBgIAYOHIjs7Gy5zIEDB9C9e3fUqFEDISEh6NKlCw4dOmRT7J988gkaN24Mf39/3HPPPViyZIm87ty5c9BoNPj666/x4IMPIjAwEC1atMDevXsN9vHxxx/LMfft2xfz5s1DaGgoACA5ORkzZszA0aNHodFooNFokJycLG975coV9O3bF4GBgWjYsCG++eYbm46HiMrHBIiIFBMUFISgoCBs3LgRBQUFJssMGDAAly5dwpYtW3Dw4EG0bt0aDz30EK5duyaXOX36NP773/9i8+bN2Lp1Kw4fPoxx48bJ63NzczFixAjs3r0b+/btQ8OGDfHII48gNze3UnGvXr0aU6dOxdtvv40TJ07gnXfewZtvvomVK1calPvXv/6FV155BUeOHEF8fDyGDBmCoqIiAMCePXswZswYTJw4EUeOHEH37t3x9ttvy9sOGjQIL7/8Mpo2bYqMjAxkZGRg0KBB8voZM2Zg4MCB+N///odHHnkEQ4cONTgnRKQwu883T0Qe5csvvxTVqlUT/v7+4oEHHhBTpkwRR48eFUIIsWvXLhEcHCxu375tsE39+vXFRx99JIQQYtq0acLb21tcuHBBXr9lyxbh5eUlMjIyTL5mcXGxqFq1qti8ebO8DIDYsGGD2edlX3/NmjUGy2bOnCnat28vhBAiLS1NABCffPKJvP6PP/4QAMSJEyeEEEIMGjRI9OrVy2AfQ4cOFSEhIfLzadOmiRYtWhi9PgDxxhtvyM/z8vIEALFlyxaT8RKR7VgDRESK6t+/P9LT0/HNN9+gR48eSElJQevWrZGcnIyjR48iLy8P1atXl2uLgoKCkJaWhjNnzsj7qFu3LmrXri0/b9++PfR6PU6ePAkAyMrKwujRo9GwYUOEhIQgODgYeXl5OH/+vNXx3rx5E2fOnMEzzzxjENOsWbMMYgKA5s2by79HRkYCAC5dugQAOHnyJNq1a2dQvuzz8pTed5UqVRAcHCzvm4iUx0bQRKQ4f39/dO/eHd27d8ebb76JUaNGYdq0aRg3bhwiIyORkpJitE1JWxlLjBgxAlevXsXChQsRExMDPz8/tG/fHoWFhVbHmpeXB0Bqv5OQkGCwztvb2+C5r6+v/LtGowEA6PV6q1/TlNL7Ltm/UvsmImNMgIjI7po0aYKNGzeidevWyMzMhI+PD2JjY82WP3/+PNLT0xEVFQUA2LdvH7y8vNCoUSMAUnubJUuW4JFHHgEA6HQ6XLlypVKx1apVC1FRUTh79iyGDh1aqX0AQKNGjXDgwAGDZWWfa7VaFBcXV/o1iEg5TICISDFXr17FgAED8PTTT6N58+aoWrUqfvvtN8ydOxe9e/dGYmIi2rdvjz59+mDu3LmIj49Heno6vvvuO/Tt2xdt27YFINUgjRgxAu+99x5ycnIwYcIEDBw4EBEREQCAhg0bYtWqVWjbti1ycnLw6quvIiAgoML40tLScOTIEYNlDRs2xIwZMzBhwgSEhISgR48eKCgowG+//Ybr169j0qRJFh37Cy+8gM6dO2PevHl47LHH8PPPP2PLli1yTREAxMbGyjHUqVMHVatWhZ+fn4Vnl4gU5exGSETkPm7fvi0mT54sWrduLUJCQkRgYKBo1KiReOONN8StW7eEEELk5OSIF154QURFRQlfX18RHR0thg4dKs6fPy+EuNtQeMmSJSIqKkr4+/uLJ554Qly7dk1+nUOHDom2bdsKf39/0bBhQ7F+/XoRExMj5s+fL5eBiUbQph67du0SQgixevVq0bJlS6HVakW1atVE586dxddffy2EuNsI+vDhw/L+rl+/LgCIHTt2yMv+85//iNq1a4uAgADRp08fMWvWLBEREWFwfvr37y9CQ0MFALFixQqTsQohREhIiLyeiJSnEUIIJ+VeRERGpk+fjo0bNxrV1Lii0aNH488//8SuXbucHQoRlcFbYERECnnvvffQvXt3VKlSBVu2bMHKlSsNBlQkIvVgAkREpJD9+/dj7ty5yM3NRVxcHD744AOMGjXK2WERkQm8BUZEREQehwMhEhERkcdhAkREREQehwkQEREReRwmQERERORxmAARERGRx2ECRERERB6HCRARERF5HCZARERE5HH+D7QIdRLDTVLGAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plotting the decision boundary: two points, draw a line between\n",
    "# Decision boundary occurs when h = 0, or when\n",
    "# theta0 + theta1*x1 + theta2*x2 = 0\n",
    "# y=ax+b is replaced by x2 = (-1/theta2)(theta0 + theta1*x1)\n",
    "\n",
    "import numpy as np\n",
    "\n",
    "# boundary_xs = np.array([torch.min(dataset.X[:,0]), torch.max(dataset.X[:,0])])\n",
    "# 使用 numpy 的 min 和 max 函数\n",
    "min_x = np.min(dataset.X[:,0])\n",
    "max_x = np.max(dataset.X[:,0])\n",
    "\n",
    "# 创建一个包含最小值和最大值的 torch.Tensor\n",
    "boundary_xs = torch.tensor([min_x, max_x])\n",
    "boundary_ys = (-1./model.state_dict()['linear.weight'][0][1].item())*(model.state_dict()['linear.bias'][0].item() + model.state_dict()['linear.weight'][0][0].item()*boundary_xs) \n",
    "\n",
    "plotData()\n",
    "plt.plot(boundary_xs,boundary_ys,'k-.',label='Decision Boundary')\n",
    "plt.legend()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "bigdatabasic",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
